#include <errno.h>
#include <stdio.h>

#include "system_stm32c8t6.h"
#include "stm32f10x_rcc.h"
#include "stm32f10x_gpio.h"
#include "Delay.h"
#include "OLED.h"
#include "Serial.h"

/**
 * led 灯在 a0 口闪烁
 */
int main(void) {
  Serial_Init();
  SysTick_Init();
  OLED_Init();
  
  printf("启动\r\n");
  OLED_ShowString(1, 1, "run\0");
  OLED_ShowNum(2, 1, SystemCoreClock, 8);

  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
  GPIO_InitTypeDef gpioITD;
  gpioITD.GPIO_Mode = GPIO_Mode_Out_PP;
  gpioITD.GPIO_Pin = GPIO_Pin_0;
  gpioITD.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOA, &gpioITD);


  while (1)
  {
    GPIO_ResetBits(GPIOA, GPIO_Pin_0);
    Delay(500);
    GPIO_SetBits(GPIOA, GPIO_Pin_0);
    Delay(500);
    printf("你好\r\n");
  }
  
  return 0;
}

#define nop()  __asm__("nop")
void _exit(int a) { for(;;); }
int _sbrk() { return -1; }
int _close() { return -1; }
int _read() { return -1; }
int _fstat() { return -1; }
int _isatty() { return -1; }
int _lseek() { return -1; }

// int _write(int file, char* ptr, int len)
// {
//    nop();
//    return 0;
// }
int _write(int file, char* ptr, int len)
{
   int i;

    if (file != 1 && file != 2) {
        errno = EBADF;
        return -1;
    }

    for (i = 0; i < len; i++) {
      Serial_SendByte(ptr[i]);
    }
    return len;
}
void foo()
{
   nop();
}

